//axios封装
import axios from 'axios'; //引入axios
import QS from 'qs'; //引入qs模块，用来序列化post类型的数据
import store from '@/store/index.js';

// 设置环境基础路径
if (process.env.NODE_ENV == 'development') {
  axios.defaults.baseURL = '/api'; //开发环境
} else if (process.env.NODE_ENV == 'debug') {
  axios.defaults.baseURL = '/api'; //测试环境
} else if (process.env.NODE_ENV == 'production') {
  axios.defaults.baseURL = '/api'; //生产环境
}

// 设置超时时间
axios.defaults.timeout = 10000;

//跨域请求时是否携带证书
axios.defaults.withCredentials = true;

//设置post请求头
axios.defaults.headers = {
  'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
  // 'Authorization': 'Bearer ' + token,
}


// 设置请求拦截器,
axios.interceptors.request.use(
  config => { //请求成功的回调函数,--------作用：判断用户是否登录或登录状态是否过期
    //   -------------------------------------------以下是方式1:
    //   if (store.state.token && config.headers.Authorization === token) {
    //     return config; //必须return config;因为请求拦截成功，外部获取不到
    //   }
    const token = store.state.token;
    token && (config.headers.Authorization = token);
    return config;
  },
  error => { //请求拦截器失败的回调函数
    return Promise.error(error)
  });

//设置响应拦截器
axios.interceptors.response.use(
  response => { //响应拦截成功,判断响应数据返回的状态码是否为200。
    if (response.status === 200) {
      return Promise.resolve(response);
    } else {
      return Promise.reject(response);

    }
  },
  error => { //响应拦截器失败
    console.log('报错了！', error);
    if (error.response.status) {
      switch (error.response.status) {
        case 301:
          console.log("资源被转载！");
          break;

        case 401:
          router.replace({
            path: '/login',
            query: {
              redirect: router.currentRoute.fullPath
            }
          });
          console.log("您还未登录");
          break;

        case 403:
          console.log("登录过期，请重新登录！");
          break;

        case 404:
          console.log("找不到服务器！");
          break;
        case 500:
          console.log("内部服务器错误！");
          break;

        default:
          console.log(error);
      }
      return Promise.reject(error.response);
    }
  });


/* 
   封装axios.get请求
   url {string} [请求地址]
   params {object} [请求时携带的参数]
*/
export function get(url, params) {
  return new Promise((resolve, reject) => { //Promise对异步操作进行封装，异步操作时使用
    axios.get(url, {
      params: params
    }).then(res => {
      resolve(res.data); //成功时调用resolve()
    }).catch(err => {
      reject(err.data); //失败时调用reject()
    });
  });
};

/* 
   封装axios.post请求
   url {string} [请求地址]
   params {object} [请求时携带的参数]
*/
export function post(url, params) {
  return new Promise((resolve, reject) => {
    axios.post(url, QS.stringify(params))
      .then(res => {
        console.log('POST接口调用成功', res);
        resolve(res);
      })
      .catch(err => {
        console.log('POST接口调用失败', err);
        reject(err);
      });
  });
};
export function postOnlyUrl(url) {
  return new Promise((resolve, reject) => {
    axios.post(url)
      .then(res => {
        console.log('POST接口调用成功', res);
        resolve(res);
      })
      .catch(err => {
        console.log('POST接口调用失败', err);
        reject(err);
      });
  });
};